﻿//to powinna byc nowsza wersja tzn. tamta nie byla nowsza tylko normalna a ta jest nowsza :)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Maksimum_funkcji
{
    public class Chromosom
    {
        public bool[] geny { get; set; }
        public int iloscGenow { get; set; }

        public Chromosom(int iloscGenow, Random rand)
        {
            this.iloscGenow = iloscGenow;

            geny = new bool[iloscGenow];

            for (int i = 0; i < iloscGenow; i++)
            {
                geny[i] = (rand.Next(2) == 1) ? true : false;
            }
        }

        public override string ToString()
        {
            string ret = ""; 
            foreach (bool gen in geny)
            {
                ret += (gen)?"1":"0";
            }
            return ret;
        }

        public Chromosom krzyzuj(Chromosom drugi, Random rand)
        {
            int punktKrzyzowania = rand.Next(this.iloscGenow - 1) + 1;

            Chromosom tempPierwszy = this;
            Chromosom tempDrugi = drugi;

            for (int i = 0; i < punktKrzyzowania; i++)
            {
                bool gen = tempPierwszy.geny[i];
                tempPierwszy.geny[i] = tempDrugi.geny[i];
                tempDrugi.geny[i] = gen;
            }

            if (rand.Next(2) == 0) return tempPierwszy;
            else return tempDrugi;
        }

        public void mutuj(Random rand)
        {
            int mutowanyGen = rand.Next(this.iloscGenow);
            this.geny[mutowanyGen] = !this.geny[mutowanyGen];
        }
    }
}
